'''
概述：是128位的全局唯一标识符，通常由32字节的字符串表示，它可以保证时间
    和空间的唯一性，也称为GUID

原理：通过MAC地址，时间戳，命名空间，随机数，伪随机数来保证生产的ID的唯一性

作用：
    1、随机生成一个字符串，当成token使用，当成用户账号使用，当成订单号使用等（要求不相同字符串0

算法：
1、uuid1()基于时间戳
    有MAC地址，当前时间戳，随机数字，可以保证全球范围内的唯一性，但是由于MAX地址
    使用时带来安全问题，局域网中可以使用IP来代替MAC
2、uuid2()基于分布式计算环境DCE
    算法与uuid1相同，不同的是把时间戳的前四位换为POSIX的UID，实际中很少使用
    注意：Python中没有这个函数
3、uuid3()基于名字和MD5散列值
    通过计算名字和命名空间的MD5散列值得到的，保证了同一命名空间中不同名字的唯一性
    和不同命名空间的唯一性，但同一命名空间的相同名字生成相同的uuid
4、uuid4()基于随机数
    由伪随机数得到的，有一定重复概率的，这个概率并且是可以计算出来的
5、uuid5()基于名字和SAH1散列值
    算法与uuid3相同，不同的是使用SAH1算法

使用经验：
    1、python中没有基于DCE的，所以uuid2可以忽略
    2、uuid4（）存在概率性重复，由于无映射行，最好不用
    3、如果在全局的分布式环境下，最好使用uuid1()
    4、若名字的唯一性要求，最好使用uuid3()或uuid5()
'''
import uuid
print(uuid.uuid1())
print(uuid.uuid4())
print(uuid.uuid3(uuid.NAMESPACE_DNS, "lifb"))
print(uuid.uuid3(uuid.NAMESPACE_DNS, "lifb"))
print(uuid.uuid3(uuid.NAMESPACE_DNS, "biaoge"))
print(uuid.uuid5(uuid.NAMESPACE_DNS, "lifb"))

